数据铺底工具说明¶
> 一键链改数据铺底工具是为了将已有的mysql数据迁移到hyperchain平台。迁移过程需要mysql自带的 mysqldump 工具辅助
> 迁移前请确认当前使用的mysql语法特性hyperchain平台均能支持或能够修改后支持。
1. 导出数据¶
1.1 使用工具导出数据¶
使用mysql的数据导出工具进行数据导出,需要导出 .sql 文件我们推荐使用 mysqldump 导出工具进行导出,当前datadump工具只针对特定内容的sql文件进行处理,即导出的文件需要满足一定的格式:
#!/bin/bash
# 需要导出的表名列表
tables=(component slave_worker_info slow_log tables_priv time_zone user)
for tableName in ${tables[@]}
do
mysqldump -uroot mysql --add-drop-table=false --add-locks=false --complete-insert --skip-comments --compact --extended-insert=false --no-create-db ${tableName} > ${tableName}.sql
done
注意上述使用 mysqldump 时必须包含这些参数,否则工具可能无法正常工作。
1.2 语法检查¶
导出数据后,需要检查导出文件中是否有不支持的语法,并进行修改。此步骤需要对比hyperchain支持的mysql语法,重点确认建表语句中是否包含不支持的语法,并进行修改。 例如,hyperchain中不支持手动设置字符集,因此建表语句:
CREATE TABLE `table1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`field1` text COLLATE utf8_unicode_ci NOT NULL COMMENT '字段1',
`field2` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '字段2',
PRIMARY KEY (`id`)
)
需要修改为:
CREATE TABLE `table1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`field1` text NOT NULL COMMENT '字段1',
`field2` varchar(128) NOT NULL DEFAULT '' COMMENT '字段2',
PRIMARY KEY (`id`)
)
2. 启动hyperchain平台¶
推荐使用SOLO节点进行数据铺底,后续再将SOLO节点的数据迁移到正式的节点
3. 修改datadump配置文件¶
工具默认的目录如下:
├── account.json // 配置使用的账户
├── conf
│ ├── hpc.toml // 修改此文件,参见go-sdk文档
│ ├── certs
│ │ ├── idcert.pfx
│ │ ├── sdkcert.cert
│ │ ├── sdkcert.priv
│ │ ├── sdkcert_cfca.cert
│ │ ├── sdkcert_cfca.priv
│ │ ├── tls
│ │ │ ├── tls_peer.cert
│ │ │ ├── tls_peer.priv
│ │ │ └── tlsca.ca
│ │ ├── unique.priv
│ │ └── unique.pub
│ └── keystore
│ └── 0xfc546753921c1d1bc2d444c5186a73ab5802a0b4
├── datadump
4. 运行命令,进行数据铺底¶
命令的详细使用方式可以通过命令查看:
$ ./datadump --help
4.2 插入数据到库中¶
命令如下:
$ ./datadump mysql2hpc -c ./conf -a ./account.json -d "4.1中生成的地址" -s "步骤1中导出的sql文件夹路径" -t 2
其中 -t 代表并发开启的线程数量,数字越大发送的速率越快(注意平台最好关掉流控以提高执行效率),命令的执行会遍历文件夹下所有 以 .sql 结尾的文件,并执行里面的建表语句以及 INSERT 语句
检查命令以及hyperchain平台日志是否有报错,直到命令执行结束。
注意:datadump默认在发送数据的时候不查询回执,即一笔交易不确认是否执行成功,因此过程中需确认平台是否产生error, 如需在工具端查询回执实时确认执行成功与否,需开启 `–checkRecept` 选项,但同时运行效率会大大降低。
附:¶
datadump命令参数: 子命令:
1. createDatabase¶
在平台上创建一个”库”,返回一个”库”地址 参数:
- –sdkConfig value, -c value Required, sdk configgosdk的配置文件路径
- –accountFilePath value, -a value Required, account json file包含account的account json文件路径
- –accountPassword value, -p value account passwordaccount账户的密码(如果有,没有则不必指定)
2. mysql2hpc¶
将sql文件数据转移到hyperchain平台 参数:
- –sdkConfig value, -c value Required, sdk configgosdk的配置文件路径
- –accountFilePath value, -a value Required, account json file包含account的account json文件路径
- –accountPassword value, -p value account passwordaccount账户的密码(如果有,没有则不必指定)
- –databaseAddress value, -d value databaseAddress of kvsql运行 createDatabase 得到的地址
- –slqDir value, -s value slqfile dir with datadump output使用mysqldump导出的sql文件的目录
- –maxConcurrent value, -t value maximum number of concurrent send (default: 2)发送的最大并发数
- –checkRecept, -r whether check recept of send tx是否校验发送交易的回执(开启后发送速率将降低,但每次发送后会检查是否执行成功)
- –insertWithDBName, -i whether insert statement with db name before table name like database.table插入语句中表名前是否包含库名
工具包附件(工具需要根据最新sdk重新打包一份 否则2.7.0链使用交易签名非法):